package web.suzy.oj.service.oj.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.stereotype.Service;
import web.suzy.oj.common.exception.StatusFailException;
import web.suzy.oj.common.exception.StatusForbiddenException;
import web.suzy.oj.common.exception.StatusNotFoundException;
import web.suzy.oj.common.result.ResultBean;
import web.suzy.oj.common.result.ResultStatus;
import web.suzy.oj.exception.AccessException;
import web.suzy.oj.manager.oj.DiscussionManager;
import web.suzy.oj.pojo.entity.discussion.Discussion;
import web.suzy.oj.pojo.vo.DiscussionVO;
import web.suzy.oj.service.oj.DiscussionService;

import javax.annotation.Resource;

/**
 * YangSuzy 软件工作室
 * 类名: DiscussionServiceImpl
 * 描述: ---- 待定 -----
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/12/10 22:53
 */
@Service
public class DiscussionServiceImpl implements DiscussionService {
    @Resource
    private DiscussionManager discussionManager;

    /**
     * 方法名: getDiscussionList
     * 描述: 获取讨论列表
     *
     * @param limit       每页显示数目
     * @param currentPage 当前页
     * @param categoryId  分类ID
     * @param pid         题目ID
     * @param onlyMine    是否只读自己
     * @param keyword     关键字
     * @param admin       是否只读管理员
     * @return web.suzy.oj.common.result.ResultBean<com.baomidou.mybatisplus.core.metadata.IPage < web.suzy.oj.pojo.entity.discussion.Discussion>>
     * @date 2022/12/10 22:53
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<IPage<Discussion>> getDiscussionList(Integer limit, Integer currentPage, Integer categoryId, String pid, Boolean onlyMine, String keyword, Boolean admin) {
        return ResultBean.successResponse(discussionManager.getDiscussionList(limit, currentPage, categoryId, pid, onlyMine, keyword, admin));
    }

    /**
     * 方法名: getDiscussion
     * 描述: 根据讨论ID获取讨论详情
     *
     * @param did 讨论ID
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.DiscussionVO>
     * @date 2022/12/10 23:10
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<DiscussionVO> getDiscussion(Integer did) {
        try {
            return ResultBean.successResponse(discussionManager.getDiscussion(did));
        } catch (StatusNotFoundException e) {
            return ResultBean.errorResponse(e.getMessage(), ResultStatus.NOT_FOUND);
        } catch (StatusForbiddenException | AccessException e) {
            return ResultBean.errorResponse(e.getMessage(), ResultStatus.FORBIDDEN);
        }
    }

    /**
     * 方法名: addDiscussion
     * 描述: 发布讨论
     *
     * @param discussion 讨论
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/12/10 23:27
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<Void> addDiscussion(Discussion discussion) {
        try {
            discussionManager.addDiscussion(discussion);
            return ResultBean.successResponse();
        } catch (StatusForbiddenException e) {
            return ResultBean.errorResponse(e.getMessage(), ResultStatus.FORBIDDEN);
        } catch (StatusFailException e) {
            return ResultBean.errorResponse(e.getMessage(), ResultStatus.FAIL);
        } catch (StatusNotFoundException e) {
            return ResultBean.errorResponse(e.getMessage(), ResultStatus.NOT_FOUND);
        }
    }
}
